<!doctype html>
<html>

	<head>
		<meta charset="utf-8">
		<title></title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<link href="css/mui.css" rel="stylesheet" />
		<link rel="stylesheet" type="text/css" href="css/mui.indexedlist.css"/>
		<style type="text/css">
			html,
			body {
				height: 100%;
				overflow: hidden;
			}
			.mui-bar {
				-webkit-box-shadow: none;
				box-shadow: none;
			}
		</style>
	</head>

	<body>
		<div class="mui-content">
			<div id='list' class="mui-indexed-list">
				<div class="mui-indexed-list-search mui-input-row mui-search">
					<input type="search" class="mui-input-clear mui-indexed-list-search-input" placeholder="搜索好友">
				</div>
				<div class="mui-indexed-list-bar">
					<a>A</a>
					<a>B</a>
					<a>C</a>
					<a>D</a>
					<a>E</a>
					<a>F</a>
					<a>G</a>
					<a>H</a>
					<a>I</a>
					<a>J</a>
					<a>K</a>
					<a>L</a>
					<a>M</a>
					<a>N</a>
					<a>O</a>
					<a>P</a>
					<a>Q</a>
					<a>R</a>
					<a>S</a>
					<a>T</a>
					<a>U</a>
					<a>V</a>
					<a>W</a>
					<a>X</a>
					<a>Y</a>
					<a>Z</a>
				</div>
				<div class="mui-indexed-list-alert"></div>
				<div class="mui-indexed-list-inner">
					<div class="mui-indexed-list-empty-alert">暂无好友</div>
					<ul id="myFriendsUl" class="mui-table-view">
						
					</ul>
				</div>
			</div>
		</div>
		<script src="js/mui.js"></script>
		<script src="js/mui.indexedlist.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/nickname.js" type="text/javascript" charset="utf-8"></script>
		<script src="./js/app.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			mui.init();
			mui.plusReady(function() {
				// 加载好友信息
				loadMyFriends();
				var currentWebview = plus.webview.currentWebview().addEventListener("show", function() {
					// 从缓存中获取联系人列表，并且渲染到页面
					renderAddressList();
					// 显示通讯录
					showList();
				});
				
				// 自定义页面刷新事件，在通过好友请求之后刷新该页面
				window.addEventListener("refresh", function() {
					plus.webview.currentWebview().reload(true);
					console.log("通讯录页面重新加载...");
				});
			});
			
			// 显示通讯录
			function showList() {
				var list = document.getElementById('list');
				list.style.height = document.body.offsetHeight + "px";
				// 创建列表显示
				window.indexedList = new mui.IndexedList(list);
			}
			
			// 加载好友信息
			function loadMyFriends() {
				// 先从缓存中获取，如果没有再去请求服务器
				if(app.getAddressList() != null) {
					return;
				}
				// 向服务器请求好友信息
				loadMyFriendsFromDB();
			}
			
			// 向服务器请求好友信息
			function loadMyFriendsFromDB() {
				console.log("更新通讯录...")
				var userinfo = app.getGlobalUserInfo();
				mui.ajax(app.serverUrl + "/user/getMyFriends",{
					data:{
						userId:userinfo.id
					},
					dataType:'json',//服务器返回json格式数据
					type:'post',//HTTP请求类型
					timeout:10000,//超时时间设置为10秒；
					headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},	              
					success:function(data){
						// 控制台中输入日志
						if(data.status == 200) {
							var myFriendsUl = document.getElementById("myFriendsUl");
							var myFriends = data.data;
							// 将好友信息存到缓存中
							app.setAddressList(myFriends);
							console.log(myFriends);
						} else {
							app.showToast(data.msg, "error");
						}
					},
					error:function(xhr,type,errorThrown){
						//异常处理；
						console.log(type);
					}
				});
			}
			
			// 从缓存中获取好友列表，并且渲染到页面
			var lis;
			function renderAddressList() {
				// 好友列表项li标签html
				lis = [];
				
				// 从缓存中获取好友列表
				var myFriends = app.getAddressList();
				if(myFriends != null && myFriends.length > 0) {
					var addressList = groupByFriendsWithFirstChar(myFriends);
					
					// 遍历27个分组
					// 先遍历昵称以字母开头的分组
					var friends;
					for(var i = 0; i < 26; i++) {
						friends = addressList[i];
						// 遍历某一个分组
						traverseFriends(friends, String.fromCharCode('A'.charCodeAt() + i))
					}
					// 再遍历昵称以数字或者其他字符开头的分组
					friends = addressList[i];
					traverseFriends(friends, "#");
					
					myFriendsUl.innerHTML = lis.join('');
					
					// 动态对忽略、通过拒绝按钮进行事件绑定
					/* mui(".btn_oper").on("tap", ".ignoreRequest", function() {
						var friendId = this.getAttribute("friendId");
						operateFriendRequest(userinfo.id, friendId, 3);
					}); */
				} else {
					myFriendsUl.innerHTML = "";
				}
				
				// 为好友列表中的每一项绑定点击事件
				mui("#myFriendsUl").on("tap", ".chat-with-this-friend", function() {
					var friendUserinfo = JSON.parse(decodeURIComponent(escape(atob(this.getAttribute("friendUserinfo")))));
					// 打开聊天主页面
					mui.openWindow({
						url: "chatting.html",
						id: "chatting-" + friendUserinfo.friendUserId,
						extras: {
							friendUserinfo: friendUserinfo
						}
					});
				});
			}
			
			/**
			 * 遍历某个分组中的好友信息
			 * @param {Object} friends
			 * @param {Object} groupChar	: 分组字符
			 */
			function traverseFriends(friends, groupChar) {
				// 如果昵称以该字符开头的好友数大于0
				if(friends.length > 0) {
					// 加一个分组字母标题
					lis.push('<li data-group="' + groupChar + '" class="mui-table-view-divider mui-indexed-list-group">' + groupChar + '</li>');
					// 循环渲染每一个好友信息
					for(var i = 0; i < friends.length; i++) {
						lis.push(renderFriendLi(friends[i]));
					}
				}
			}
			
			/**
			 * 根据首字母将好友进行分组
			 * @param {Object} myFriends
			 */
			function groupByFriendsWithFirstChar(myFriends) {
				// 记录昵称以26个字母或者数字或者其他字符开头的好友列表，数字和其他字符统一用存放在'#'字符所在索引为26的位置
				// 二维数组初始化
				var addressList = new Array(27);
				for(var i = 0; i < addressList.length; i++) {
					addressList[i] = [];
				}
				
				// 循环好友列表，将昵称转换为拼音
				for(var i = 0; i < myFriends.length; i++) {
					var friend = myFriends[i];
					// 转化成拼音
					var pinyinNickname = words.convertPinyin(friend.friendNickname);
					// 截取拼音的首字母，转成大写
					var firstChar = pinyinNickname.substr(0, 1).toUpperCase();
					// 找到首字母对应的数组的索引
					var index;
					if(firstChar >= 'A' && firstChar <= 'Z') {
						index = firstChar.charCodeAt(0) - 'A'.charCodeAt(0);
					} else {
						index = 26;
					}
					addressList[index].push(friend);
				}
				
				return addressList;
			}
			
			// 渲染好友列表中的某一项
			function renderFriendLi(friend) {
				var html =  '<li friendUserinfo="' + btoa(unescape(encodeURIComponent(JSON.stringify(friend)))) + '" class="chat-with-this-friend mui-media mui-table-view-cell mui-indexed-list-item" style="padding: 8px 10px;">' +
								'<img class="mui-media-object mui-pull-left" style="max-width: 35px; height: 35px;" src="' + app.imgServerUrl + friend.friendFaceImage + '">' +
								'<div class="mui-media-body" style="line-height: 35px;">' +
									friend.friendNickname +
								'</div>' +
							'</li>';
				return html;
			}
		</script>
	</body>

</html>
